package com.pkk.cloud.support.oauth2.client.detail.client.entity;

import java.io.Serializable;
import java.util.Date;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * @author peikunkun<br>
 * @version V1.0<br>
 * @Title: <br>
 * @Description: <客户端表实体信息><br>
 * @date 2020/3/17 0017 下午 5:52<br>
 * @URL:[]
 */
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class PenguinOauthClient implements Serializable {

  private static final long serialVersionUID = 8522362395140876608L;

  private Long id;

  /**
   * 客户端id[第三方用户的id（可理解为账号）]
   */
  private String clientId;

  /**
   * 客户端名称
   */
  private String clientName;

  /**
   * 客户端密钥【第三方应用和授权服务器之间的安全凭证(可理解为密码)】
   */
  private String clientSecret;

  /**
   * 客户端码
   */
  private String clientCode;


  /**
   * 客户端源密码
   */
  private String clientOriginalSecret;

  /**
   * 授权类型此客户端可以使用的授权类型，默认为空。
   * <p>
   * 可选值包括authorization_code,password,refresh_token,implicit,client_credentials 最常用的grant_type组合有:
   * "authorization_code,refresh_token"(针对通过浏览器访问的客户端); "password,refresh_token"(针对移动设备的客户端)
   * <p>
   * ------------
   * <p>
   * 授权码模式（authorization code）,简化模式（implicit）,密码模式（resource owner password credentials）,客户端模式（client credentials）
   * <p>
   * 这其中密码模式需要将用户地帐密提供给客户端，但客户端不能存储密码，这种模式好像和我们之前说的不一样啊？其实，这种模式一般用在高度信任地情况下，比如合作厂商，自己系统地各服务之间地通信等。
   * <p>
   * 客户端模式更加地简单了，直接由客户端像认证服务器请求令牌，没有用户什么事。
   * <p>
   * 最接近我们之前描述地其实是授权码模式，但是这种模式又非常地复杂，涉及到回调地址，而且用户没有向客户端提供帐密，最后客户端是通过授权服务器发放地token（也就是授权码）来拿资源地
   */
  private String grantType;

  /**
   * token的有效期access_token 的有效时长 (秒), 默认 12 小时
   */
  private Integer accessTokenValiditySeconds;

  /**
   * 刷新token的有效期refresh_token 的有效时长 (秒), 默认 30 天
   */
  private Integer refreshTokenValiditySeconds;

  /**
   * 资源ID【客户端所能访问的资源id集合】
   */
  private String resourceIds;

  /**
   * 是否启用
   */
  private Boolean enable;

  /**
   * 类型，1：页面，2：服务
   */
  private Integer clientType;

  /**
   * 客户端所属服务端id(一个服务端可以有多个客户端)
   */
  private Long ownServerId;

  /**
   * 是否删除，0否，1是
   */
  private Boolean delFlag;

  /**
   * 创建人
   */
  private Long createdBy;

  /**
   * 创建时间
   */
  private Date createdDate;

  /**
   * 最后修改人
   */
  private Long lastModifiedBy;

  /**
   * 修改时间
   */
  private Date lastModifiedDate;

  /**
   * 跳转URL客户端的重定向URI
   */
  private String redirectUri;

}